1 /* 2 3 Boost Software License - Version 1.0 - August 17th, 2003 4 5 Permission is hereby granted, free of charge, to any person or organization 6 obtaining a copy of the software and accompanying documentation covered by 7 this license (the "Software") to use, reproduce, display, distribute, 8 execute, and transmit the Software, and to prepare derivative works of the 9 Software, and to permit third-parties to whom the Software is furnished to 10 do so, all subject to the following: 11 12 The copyright notices in the Software and this entire statement, including 13 the above license grant, this restriction and the following disclaimer, 14 must be included in all copies of the Software, in whole or in part, and 15 all derivative works of the Software, unless such copies or derivative 16 works are solely in the form of machine-executable object code generated by 17 a source language processor. 18 19 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT 22 SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE 23 FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, 24 ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 25 DEALINGS IN THE SOFTWARE. 26 27 */ 28 29 module derelict.glib.gmain; 30 31 import derelict.glib.gtypes; 32 import derelict.glib.glibconfig; 33 import derelict.glib.gslist; 34 import derelict.glib.gpoll; 35 import derelict.glib.gthread; 36 import core.sys.posix.poll; 37 import core.stdc.config; 38 39 extern (C): 40 41 alias _GMainContext GMainContext; 42 alias _GMainLoop GMainLoop; 43 alias _GSource GSource; 44 alias _GSourcePrivate GSourcePrivate; 45 alias _GSourceCallbackFuncs GSourceCallbackFuncs; 46 alias _GSourceFuncs GSourceFuncs; 47 alias int function (void*) GSourceFunc; 48 alias void function (int, int, void*) GChildWatchFunc; 49 alias void function () GSourceDummyMarshal; 50 51 version(Derelict_Link_Static) 52 { 53 //extern( C ) __gshared 54 //{ 55 // GSourceFuncs g_timeout_funcs; 56 // GSourceFuncs g_child_watch_funcs; 57 // GSourceFuncs g_idle_funcs; 58 //} 59 } 60 else 61 { 62 extern( C ) nothrow 63 { 64 alias da_g_timeout_funcs = GSourceFuncs; 65 alias da_g_child_watch_funcs = GSourceFuncs; 66 alias da_g_idle_funcs = GSourceFuncs; 67 } 68 69 __gshared 70 { 71 da_g_timeout_funcs g_timeout_funcs; 72 da_g_child_watch_funcs g_child_watch_funcs; 73 da_g_idle_funcs g_idle_funcs; 74 } 75 } 76 77 78 struct _GSource 79 { 80 gpointer callback_data; 81 GSourceCallbackFuncs* callback_funcs; 82 GSourceFuncs* source_funcs; 83 guint ref_count; 84 GMainContext* context; 85 gint priority; 86 guint flags; 87 guint source_id; 88 GSList* poll_fds; 89 GSource* prev; 90 GSource* next; 91 char* name; 92 GSourcePrivate* priv; 93 } 94 95 struct _GSourceCallbackFuncs 96 { 97 void function (gpointer) ref_; 98 void function (gpointer) unref; 99 void function (gpointer, GSource*, GSourceFunc*, gpointer*) get; 100 } 101 102 struct _GSourceFuncs 103 { 104 gboolean function (GSource*, gint*) prepare; 105 gboolean function (GSource*) check; 106 gboolean function (GSource*, GSourceFunc, gpointer) dispatch; 107 void function (GSource*) finalize; 108 GSourceFunc closure_callback; 109 GSourceDummyMarshal closure_marshal; 110 } 111 112 struct _GSourcePrivate; 113 114 115 struct _GMainLoop; 116 117 118 struct _GMainContext; 119 120 121 version(Derelict_Link_Static) 122 { 123 extern( C ) nothrow 124 { 125 GMainContext* g_main_context_new(); 126 GMainContext* g_main_context_ref(GMainContext* context); 127 void g_main_context_unref(GMainContext* context); 128 GMainContext* g_main_context_default(); 129 gboolean g_main_context_iteration(GMainContext* context, gboolean may_block); 130 gboolean g_main_context_pending(GMainContext* context); 131 GSource* g_main_context_find_source_by_id(GMainContext* context, guint source_id); 132 GSource* g_main_context_find_source_by_user_data(GMainContext* context, gpointer user_data); 133 GSource* g_main_context_find_source_by_funcs_user_data(GMainContext* context, GSourceFuncs* funcs, gpointer user_data); 134 void g_main_context_wakeup(GMainContext* context); 135 gboolean g_main_context_acquire(GMainContext* context); 136 void g_main_context_release(GMainContext* context); 137 gboolean g_main_context_is_owner(GMainContext* context); 138 gboolean g_main_context_wait(GMainContext* context, GCond* cond, GMutex* mutex); 139 gboolean g_main_context_prepare(GMainContext* context, gint* priority); 140 gint g_main_context_query(GMainContext* context, gint max_priority, gint* timeout_, GPollFD* fds, gint n_fds); 141 gint g_main_context_check(GMainContext* context, gint max_priority, GPollFD* fds, gint n_fds); 142 void g_main_context_dispatch(GMainContext* context); 143 void g_main_context_set_poll_func(GMainContext* context, GPollFunc func); 144 GPollFunc g_main_context_get_poll_func(GMainContext* context); 145 void g_main_context_add_poll(GMainContext* context, GPollFD* fd, gint priority); 146 void g_main_context_remove_poll(GMainContext* context, GPollFD* fd); 147 gint g_main_depth(); 148 GSource* g_main_current_source(); 149 void g_main_context_push_thread_default(GMainContext* context); 150 void g_main_context_pop_thread_default(GMainContext* context); 151 GMainContext* g_main_context_get_thread_default(); 152 GMainContext* g_main_context_ref_thread_default(); 153 GMainLoop* g_main_loop_new(GMainContext* context, gboolean is_running); 154 void g_main_loop_run(GMainLoop* loop); 155 void g_main_loop_quit(GMainLoop* loop); 156 GMainLoop* g_main_loop_ref(GMainLoop* loop); 157 void g_main_loop_unref(GMainLoop* loop); 158 gboolean g_main_loop_is_running(GMainLoop* loop); 159 GMainContext* g_main_loop_get_context(GMainLoop* loop); 160 GSource* g_source_new(GSourceFuncs* source_funcs, guint struct_size); 161 GSource* g_source_ref(GSource* source); 162 void g_source_unref(GSource* source); 163 guint g_source_attach(GSource* source, GMainContext* context); 164 void g_source_destroy(GSource* source); 165 void g_source_set_priority(GSource* source, gint priority); 166 gint g_source_get_priority(GSource* source); 167 void g_source_set_can_recurse(GSource* source, gboolean can_recurse); 168 gboolean g_source_get_can_recurse(GSource* source); 169 guint g_source_get_id(GSource* source); 170 GMainContext* g_source_get_context(GSource* source); 171 void g_source_set_callback(GSource* source, GSourceFunc func, gpointer data, GDestroyNotify notify); 172 void g_source_set_funcs(GSource* source, GSourceFuncs* funcs); 173 gboolean g_source_is_destroyed(GSource* source); 174 void g_source_set_name(GSource* source, const(char)* name); 175 const(char)* g_source_get_name(GSource* source); 176 void g_source_set_name_by_id(guint tag, const(char)* name); 177 void g_source_set_callback_indirect(GSource* source, gpointer callback_data, GSourceCallbackFuncs* callback_funcs); 178 void g_source_add_poll(GSource* source, GPollFD* fd); 179 void g_source_remove_poll(GSource* source, GPollFD* fd); 180 void g_source_add_child_source(GSource* source, GSource* child_source); 181 void g_source_remove_child_source(GSource* source, GSource* child_source); 182 void g_source_get_current_time(GSource* source, GTimeVal* timeval); 183 gint64 g_source_get_time(GSource* source); 184 GSource* g_idle_source_new(); 185 GSource* g_child_watch_source_new(GPid pid); 186 GSource* g_timeout_source_new(guint interval); 187 GSource* g_timeout_source_new_seconds(guint interval); 188 void g_get_current_time(GTimeVal* result); 189 gint64 g_get_monotonic_time(); 190 gint64 g_get_real_time(); 191 gboolean g_source_remove(guint tag); 192 gboolean g_source_remove_by_user_data(gpointer user_data); 193 gboolean g_source_remove_by_funcs_user_data(GSourceFuncs* funcs, gpointer user_data); 194 guint g_timeout_add_full(gint priority, guint interval, GSourceFunc function_, gpointer data, GDestroyNotify notify); 195 guint g_timeout_add(guint interval, GSourceFunc function_, gpointer data); 196 guint g_timeout_add_seconds_full(gint priority, guint interval, GSourceFunc function_, gpointer data, GDestroyNotify notify); 197 guint g_timeout_add_seconds(guint interval, GSourceFunc function_, gpointer data); 198 guint g_child_watch_add_full(gint priority, GPid pid, GChildWatchFunc function_, gpointer data, GDestroyNotify notify); 199 guint g_child_watch_add(GPid pid, GChildWatchFunc function_, gpointer data); 200 guint g_idle_add(GSourceFunc function_, gpointer data); 201 guint g_idle_add_full(gint priority, GSourceFunc function_, gpointer data, GDestroyNotify notify); 202 gboolean g_idle_remove_by_data(gpointer data); 203 void g_main_context_invoke_full(GMainContext* context, gint priority, GSourceFunc function_, gpointer data, GDestroyNotify notify); 204 void g_main_context_invoke(GMainContext* context, GSourceFunc function_, gpointer data); 205 } 206 } 207 else 208 { 209 extern( C ) nothrow 210 { 211 alias da_g_main_context_new = GMainContext* function(); 212 alias da_g_main_context_ref = GMainContext* function(GMainContext* context); 213 alias da_g_main_context_unref = void function(GMainContext* context); 214 alias da_g_main_context_default = GMainContext* function(); 215 alias da_g_main_context_iteration = gboolean function(GMainContext* context, gboolean may_block); 216 alias da_g_main_context_pending = gboolean function(GMainContext* context); 217 alias da_g_main_context_find_source_by_id = GSource* function(GMainContext* context, guint source_id); 218 alias da_g_main_context_find_source_by_user_data = GSource* function(GMainContext* context, gpointer user_data); 219 alias da_g_main_context_find_source_by_funcs_user_data = GSource* function(GMainContext* context, GSourceFuncs* funcs, gpointer user_data); 220 alias da_g_main_context_wakeup = void function(GMainContext* context); 221 alias da_g_main_context_acquire = gboolean function(GMainContext* context); 222 alias da_g_main_context_release = void function(GMainContext* context); 223 alias da_g_main_context_is_owner = gboolean function(GMainContext* context); 224 alias da_g_main_context_wait = gboolean function(GMainContext* context, GCond* cond, GMutex* mutex); 225 alias da_g_main_context_prepare = gboolean function(GMainContext* context, gint* priority); 226 alias da_g_main_context_query = gint function(GMainContext* context, gint max_priority, gint* timeout_, GPollFD* fds, gint n_fds); 227 alias da_g_main_context_check = gint function(GMainContext* context, gint max_priority, GPollFD* fds, gint n_fds); 228 alias da_g_main_context_dispatch = void function(GMainContext* context); 229 alias da_g_main_context_set_poll_func = void function(GMainContext* context, GPollFunc func); 230 alias da_g_main_context_get_poll_func = GPollFunc function(GMainContext* context); 231 alias da_g_main_context_add_poll = void function(GMainContext* context, GPollFD* fd, gint priority); 232 alias da_g_main_context_remove_poll = void function(GMainContext* context, GPollFD* fd); 233 alias da_g_main_depth = gint function(); 234 alias da_g_main_current_source = GSource* function(); 235 alias da_g_main_context_push_thread_default = void function(GMainContext* context); 236 alias da_g_main_context_pop_thread_default = void function(GMainContext* context); 237 alias da_g_main_context_get_thread_default = GMainContext* function(); 238 alias da_g_main_context_ref_thread_default = GMainContext* function(); 239 alias da_g_main_loop_new = GMainLoop* function(GMainContext* context, gboolean is_running); 240 alias da_g_main_loop_run = void function(GMainLoop* loop); 241 alias da_g_main_loop_quit = void function(GMainLoop* loop); 242 alias da_g_main_loop_ref = GMainLoop* function(GMainLoop* loop); 243 alias da_g_main_loop_unref = void function(GMainLoop* loop); 244 alias da_g_main_loop_is_running = gboolean function(GMainLoop* loop); 245 alias da_g_main_loop_get_context = GMainContext* function(GMainLoop* loop); 246 alias da_g_source_new = GSource* function(GSourceFuncs* source_funcs, guint struct_size); 247 alias da_g_source_ref = GSource* function(GSource* source); 248 alias da_g_source_unref = void function(GSource* source); 249 alias da_g_source_attach = guint function(GSource* source, GMainContext* context); 250 alias da_g_source_destroy = void function(GSource* source); 251 alias da_g_source_set_priority = void function(GSource* source, gint priority); 252 alias da_g_source_get_priority = gint function(GSource* source); 253 alias da_g_source_set_can_recurse = void function(GSource* source, gboolean can_recurse); 254 alias da_g_source_get_can_recurse = gboolean function(GSource* source); 255 alias da_g_source_get_id = guint function(GSource* source); 256 alias da_g_source_get_context = GMainContext* function(GSource* source); 257 alias da_g_source_set_callback = void function(GSource* source, GSourceFunc func, gpointer data, GDestroyNotify notify); 258 alias da_g_source_set_funcs = void function(GSource* source, GSourceFuncs* funcs); 259 alias da_g_source_is_destroyed = gboolean function(GSource* source); 260 alias da_g_source_set_name = void function(GSource* source, const(char)* name); 261 alias da_g_source_get_name = const(char)* function(GSource* source); 262 alias da_g_source_set_name_by_id = void function(guint tag, const(char)* name); 263 alias da_g_source_set_callback_indirect = void function(GSource* source, gpointer callback_data, GSourceCallbackFuncs* callback_funcs); 264 alias da_g_source_add_poll = void function(GSource* source, GPollFD* fd); 265 alias da_g_source_remove_poll = void function(GSource* source, GPollFD* fd); 266 alias da_g_source_add_child_source = void function(GSource* source, GSource* child_source); 267 alias da_g_source_remove_child_source = void function(GSource* source, GSource* child_source); 268 alias da_g_source_get_current_time = void function(GSource* source, GTimeVal* timeval); 269 alias da_g_source_get_time = gint64 function(GSource* source); 270 alias da_g_idle_source_new = GSource* function(); 271 alias da_g_child_watch_source_new = GSource* function(GPid pid); 272 alias da_g_timeout_source_new = GSource* function(guint interval); 273 alias da_g_timeout_source_new_seconds = GSource* function(guint interval); 274 alias da_g_get_current_time = void function(GTimeVal* result); 275 alias da_g_get_monotonic_time = gint64 function(); 276 alias da_g_get_real_time = gint64 function(); 277 alias da_g_source_remove = gboolean function(guint tag); 278 alias da_g_source_remove_by_user_data = gboolean function(gpointer user_data); 279 alias da_g_source_remove_by_funcs_user_data = gboolean function(GSourceFuncs* funcs, gpointer user_data); 280 alias da_g_timeout_add_full = guint function(gint priority, guint interval, GSourceFunc function_, gpointer data, GDestroyNotify notify); 281 alias da_g_timeout_add = guint function(guint interval, GSourceFunc function_, gpointer data); 282 alias da_g_timeout_add_seconds_full = guint function(gint priority, guint interval, GSourceFunc function_, gpointer data, GDestroyNotify notify); 283 alias da_g_timeout_add_seconds = guint function(guint interval, GSourceFunc function_, gpointer data); 284 alias da_g_child_watch_add_full = guint function(gint priority, GPid pid, GChildWatchFunc function_, gpointer data, GDestroyNotify notify); 285 alias da_g_child_watch_add = guint function(GPid pid, GChildWatchFunc function_, gpointer data); 286 alias da_g_idle_add = guint function(GSourceFunc function_, gpointer data); 287 alias da_g_idle_add_full = guint function(gint priority, GSourceFunc function_, gpointer data, GDestroyNotify notify); 288 alias da_g_idle_remove_by_data = gboolean function(gpointer data); 289 alias da_g_main_context_invoke_full = void function(GMainContext* context, gint priority, GSourceFunc function_, gpointer data, GDestroyNotify notify); 290 alias da_g_main_context_invoke = void function(GMainContext* context, GSourceFunc function_, gpointer data); 291 } 292 293 __gshared 294 { 295 da_g_main_context_new g_main_context_new; 296 da_g_main_context_ref g_main_context_ref; 297 da_g_main_context_unref g_main_context_unref; 298 da_g_main_context_default g_main_context_default; 299 da_g_main_context_iteration g_main_context_iteration; 300 da_g_main_context_pending g_main_context_pending; 301 da_g_main_context_find_source_by_id g_main_context_find_source_by_id; 302 da_g_main_context_find_source_by_user_data g_main_context_find_source_by_user_data; 303 da_g_main_context_find_source_by_funcs_user_data g_main_context_find_source_by_funcs_user_data; 304 da_g_main_context_wakeup g_main_context_wakeup; 305 da_g_main_context_acquire g_main_context_acquire; 306 da_g_main_context_release g_main_context_release; 307 da_g_main_context_is_owner g_main_context_is_owner; 308 da_g_main_context_wait g_main_context_wait; 309 da_g_main_context_prepare g_main_context_prepare; 310 da_g_main_context_query g_main_context_query; 311 da_g_main_context_check g_main_context_check; 312 da_g_main_context_dispatch g_main_context_dispatch; 313 da_g_main_context_set_poll_func g_main_context_set_poll_func; 314 da_g_main_context_get_poll_func g_main_context_get_poll_func; 315 da_g_main_context_add_poll g_main_context_add_poll; 316 da_g_main_context_remove_poll g_main_context_remove_poll; 317 da_g_main_depth g_main_depth; 318 da_g_main_current_source g_main_current_source; 319 da_g_main_context_push_thread_default g_main_context_push_thread_default; 320 da_g_main_context_pop_thread_default g_main_context_pop_thread_default; 321 da_g_main_context_get_thread_default g_main_context_get_thread_default; 322 da_g_main_context_ref_thread_default g_main_context_ref_thread_default; 323 da_g_main_loop_new g_main_loop_new; 324 da_g_main_loop_run g_main_loop_run; 325 da_g_main_loop_quit g_main_loop_quit; 326 da_g_main_loop_ref g_main_loop_ref; 327 da_g_main_loop_unref g_main_loop_unref; 328 da_g_main_loop_is_running g_main_loop_is_running; 329 da_g_main_loop_get_context g_main_loop_get_context; 330 da_g_source_new g_source_new; 331 da_g_source_ref g_source_ref; 332 da_g_source_unref g_source_unref; 333 da_g_source_attach g_source_attach; 334 da_g_source_destroy g_source_destroy; 335 da_g_source_set_priority g_source_set_priority; 336 da_g_source_get_priority g_source_get_priority; 337 da_g_source_set_can_recurse g_source_set_can_recurse; 338 da_g_source_get_can_recurse g_source_get_can_recurse; 339 da_g_source_get_id g_source_get_id; 340 da_g_source_get_context g_source_get_context; 341 da_g_source_set_callback g_source_set_callback; 342 da_g_source_set_funcs g_source_set_funcs; 343 da_g_source_is_destroyed g_source_is_destroyed; 344 da_g_source_set_name g_source_set_name; 345 da_g_source_get_name g_source_get_name; 346 da_g_source_set_name_by_id g_source_set_name_by_id; 347 da_g_source_set_callback_indirect g_source_set_callback_indirect; 348 da_g_source_add_poll g_source_add_poll; 349 da_g_source_remove_poll g_source_remove_poll; 350 da_g_source_add_child_source g_source_add_child_source; 351 da_g_source_remove_child_source g_source_remove_child_source; 352 da_g_source_get_current_time g_source_get_current_time; 353 da_g_source_get_time g_source_get_time; 354 da_g_idle_source_new g_idle_source_new; 355 da_g_child_watch_source_new g_child_watch_source_new; 356 da_g_timeout_source_new g_timeout_source_new; 357 da_g_timeout_source_new_seconds g_timeout_source_new_seconds; 358 da_g_get_current_time g_get_current_time; 359 da_g_get_monotonic_time g_get_monotonic_time; 360 da_g_get_real_time g_get_real_time; 361 da_g_source_remove g_source_remove; 362 da_g_source_remove_by_user_data g_source_remove_by_user_data; 363 da_g_source_remove_by_funcs_user_data g_source_remove_by_funcs_user_data; 364 da_g_timeout_add_full g_timeout_add_full; 365 da_g_timeout_add g_timeout_add; 366 da_g_timeout_add_seconds_full g_timeout_add_seconds_full; 367 da_g_timeout_add_seconds g_timeout_add_seconds; 368 da_g_child_watch_add_full g_child_watch_add_full; 369 da_g_child_watch_add g_child_watch_add; 370 da_g_idle_add g_idle_add; 371 da_g_idle_add_full g_idle_add_full; 372 da_g_idle_remove_by_data g_idle_remove_by_data; 373 da_g_main_context_invoke_full g_main_context_invoke_full; 374 da_g_main_context_invoke g_main_context_invoke; 375 } 376 }